package com.example.mc.handler;


import com.example.common.msg.template.MsgTemplate;

/**
 * @author zxj
 * @date 2018/11/16 10:20
 */
public abstract class  MessageHandler<T> {
	/**
	 * 执行入口
	 *
	 * @param msgTemplate 信息
	 */
	public void execute(MsgTemplate<T> msgTemplate){
		check(msgTemplate);
		if (!process(msgTemplate)) {
			fail(msgTemplate);
		}
	};

	/**
	 * 数据校验
	 *
	 * @param msgTemplate 信息
	 */
	public abstract void check(MsgTemplate<T> msgTemplate);

	/**
	 * 业务处理
	 *
	 * @param msgTemplate 信息
	 * @return boolean
	 */
	public abstract boolean process(MsgTemplate<T> msgTemplate);

	/**
	 * 失败处理
	 *
	 * @param msgTemplate 信息
	 */
	public abstract void fail(MsgTemplate<T> msgTemplate);
}
